package org.example;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Solution14 {

    public int[][] merge(int [][] intervals) {
        // 检查输入合法性
        if (intervals == null || intervals.length == 0) {
            return new int[0][2];
        }

        // 按照起点的大小，对数组进行排序
        Arrays.sort(intervals, (a, b) -> a[0] - b[0]);

        // 初始化结果列表
        List<int[]> mergedIntervals = new ArrayList<>();
        int[] currentInterval = intervals[0];
        mergedIntervals.add(currentInterval);

        for (int[] interval : intervals) {
            int currentEnd = currentInterval[1];
            int nextStart = interval[0];
            int nextEnd = interval[1];

            // 如果当前区间的结束点 》= 下一个区间的开始点，那么它们重叠
            if (currentEnd >= nextStart) {
                // 更新当前区间的结束点为两者中的较大值
                currentInterval[1] = Math.max(currentEnd, nextEnd);
            } else {
                // 否则，添加下一个区间到结果列表，并更新当前的区间
                currentInterval = interval;
                mergedIntervals.add(currentInterval);
            }
        }

        return mergedIntervals.toArray(new int[mergedIntervals.size()][]);
    }

}
